package com.yunke.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yunke.entity.YunkeContactApply;

import java.util.Map;

/**
 * 联系方式申请服务接口
 * 
 * @author yunke
 * @since 1.0.0
 */
public interface YunkeContactApplyService extends IService<YunkeContactApply> {

    /**
     * 提交申请
     */
    boolean submitApply(YunkeContactApply apply);

    /**
     * 同意申请
     */
    boolean approveApply(Long id, Long userId);

    /**
     * 拒绝申请
     */
    boolean rejectApply(Long id, Long userId, String rejectReason);

    /**
     * 取消申请
     */
    boolean cancelApply(Long id, Long userId);

    /**
     * 分页查询申请列表
     */
    IPage<YunkeContactApply> getApplyPage(Integer current, Integer size,
                                         Long applyUserId, Long targetUserId, Integer applyStatus);

    /**
     * 根据ID查询申请详情
     */
    YunkeContactApply getApplyById(Long id);

    /**
     * 查询未读申请数量
     */
    long getUnreadCount(Long userId);

    /**
     * 标记为已读
     */
    boolean markAsRead(Long id);

    /**
     * 标记全部为已读
     */
    boolean markAllAsRead(Long userId);

    /**
     * 获取申请统计
     */
    Map<String, Object> getApplyStatistics();

    /**
     * 强制同意申请（管理员功能）
     */
    boolean forceApproveApply(Long id);

    /**
     * 强制拒绝申请（管理员功能）
     */
    boolean forceRejectApply(Long id, String reason);

    /**
     * 检查申请权限
     */
    boolean checkApplyPermission(Long applyUserId, Long targetUserId);

    /**
     * 清理过期申请
     */
    boolean cleanExpiredApplies();
} 